package be.groept.ace.cursusplanning.persistency.persistencyProvidersText;

import java.util.List;

import be.groept.ace.cursusplanning.model.Cursist;
import be.groept.ace.cursusplanning.model.CursusHistoriek;
import be.groept.ace.cursusplanning.model.Inschrijving;
import be.groept.ace.cursusplanning.persistency.DBMS_Tekstbestanden;
import be.groept.ace.cursusplanning.persistency.IPersistentieController;
import be.groept.ace.cursusplanning.persistency.IPersistentieProvider;
import be.groept.ace.cursusplanning.persistency.Persisteerbaar;
import be.groept.ace.cursusplanning.persistency.SaveStringBuilder;


/**
 * @author Gouke Leplat
 * 
 * Voorziet de klasse Cursist van een methode om de nodige informatie
 * te verzamelen om een object van deze klasse weg te schrijven in een tekstbestand
 */

public class PersistencyProviderCursist implements IPersistentieProvider {

	Cursist cursist;
	
	/**
	 * bepaalt welk object deze persistentieprovider behandelt
	 * @param pObj
	 * 			object van het type Cursist
	 */
	@Override
	public void setTarget(Persisteerbaar pObj) {
		this.cursist = (Cursist) pObj;
	}
	
	
	/**
	 * 	geeft een array met strings terug aan de persistentiecontroller
	 * @param controller
	 * 		de persistentiecontroller waar de informatie naartoe moet gestuurd worden
	 * @return Object[] 
	 * 		array van String objecten
	 */
	@Override
	public Object[] getInfoToBeSaved(IPersistentieController controller) {
		
		SaveStringBuilder S = new SaveStringBuilder();
		
		Object[] output = new Object[0];
		
		output = S.CreateObject(cursist, new Object[] {cursist.getCursistNummer(),cursist.getCursistNaam()},output);
		 
		List<CursusHistoriek> cursushistorieken = cursist.getCursushistorieken();
		
		// cursushistorieken
		for(int i = 0 ; i < cursushistorieken.size(); i++){ // historiekenworden niet opgeslagen
			output = S.Method("addCursusHistoriek", new Object [] {cursushistorieken.get(i)},output );

			((DBMS_Tekstbestanden)controller).writeObjectFile((Persisteerbaar) cursushistorieken.get(i));
			
		}
		
		List<Inschrijving> inschrijvingen = cursist.getInschrijvingen();
		// inschrijvingen
		for(int i = 0 ; i < inschrijvingen.size(); i++){
			output = S.Method("addInschrijving", new Object [] {inschrijvingen.get(i)},output );
		}
		
		return output;
	}

	

}
